#include <stdio.h>
#include <pthread.h>

pthread_mutex_t mutex;
pthread_cond_t cond;
char input_char = '\0';
int ready = 0;

void *thread1_function(void *arg)
{
    while (1)
    {
        pthread_mutex_lock(&mutex);

        // 等待小写字母输入
        printf("请输入小写字母（输入非小写字母退出）：");
        scanf(" %c", &input_char);

        // 检查是否为小写字母，不是则退出
        if (input_char < 'a' || input_char > 'z')
        {
            ready = 1;
            pthread_cond_signal(&cond);
            pthread_mutex_unlock(&mutex);
            break;
        }

        // 设置标志并通知线程2
        ready = 1;
        pthread_cond_signal(&cond);

        // 等待线程2处理完成
        while (ready)
        {
            pthread_cond_wait(&cond, &mutex);
        }

        pthread_mutex_unlock(&mutex);
    }
    return NULL;
}

void *thread2_function(void *arg)
{
    while (1)
    {
        pthread_mutex_lock(&mutex);

        // 等待输入准备好
        while (!ready)
        {
            pthread_cond_wait(&cond, &mutex);
        }

        // 检查是否需要退出
        if (input_char < 'a' || input_char > 'z')
        {
            pthread_mutex_unlock(&mutex);
            break;
        }

        // 转换为大写并输出
        printf("对应的大写字母是：%c\n", input_char - 32);

        // 重置标志并通知线程1
        ready = 0;
        pthread_cond_signal(&cond);

        pthread_mutex_unlock(&mutex);
    }
    return NULL;
}

int main()
{
    pthread_t thread1, thread2;

    // 初始化互斥锁和条件变量
    pthread_mutex_init(&mutex, NULL);
    pthread_cond_init(&cond, NULL);

    // 创建线程
    pthread_create(&thread1, NULL, thread1_function, NULL);
    pthread_create(&thread2, NULL, thread2_function, NULL);

    // 等待线程结束
    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);

    // 销毁互斥锁和条件变量
    pthread_mutex_destroy(&mutex);
    pthread_cond_destroy(&cond);

    return 0;
}